﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using produccion.clases;
using System.Windows.Input;
using System.Windows;
using System.Collections.ObjectModel;
using System.ComponentModel;
using produccion.modelo;
using produccion.AccesoDatos;
using System.Diagnostics;
using System.Collections.Specialized;
using System.Windows.Controls;
using System.Globalization;
using System.Windows.Media.Imaging;
using System.Data;
using produccion.reportes;
using produccion.forms;

namespace produccion.vistamodelo
{
    public class VMRelacionGeneralAjustes : ViewModelBase
    {
        #region Campos
            private ProcesoProduccionRepositorio _repositorio = new ProcesoProduccionRepositorio();//Guarda los metodos que tienen los SP
            private CLSMAECLIP _Clientes = new CLSMAECLIP();

            String strParCodigoMateriaPrimaInicial, strParCodigoMateriaPrimaFinal;
            DateTime DatParFechaDesde, DatParFechaHasta;
        #endregion
        #region Constructor
            public VMRelacionGeneralAjustes()
            {
                try
                {
                    if (MDOgeneral.conexion == null || MDOgeneral.conexion.State == ConnectionState.Closed)
                    {
                        MDOgeneral.conectar();
                    }
                    strTituloVentana = "RELACIÓN GENERAL DE AJUSTES" + " - Usuario: " + MDOgeneral.usuario + " - [FrmRelacionGeneralAjustes]";

                    DateTime dtmFecha = DateTime.Now;
                    DttFechaDesde = dtmFecha.AddDays(-30);
                    DttFechaHasta = dtmFecha;
                }
                catch (Exception ex) { MessageBox.Show(ex.Message); }
            }
        #endregion
        #region Interfaces publicas (Propiedades)
            //CODIGO TITULO DEL FORMULARIO
            private DateTime _DttFechaDesde;
            public DateTime DttFechaDesde
            {
                get { return _DttFechaDesde; }
                set 
                { 
                    _DttFechaDesde = value;
                    Consultar();
                    base.OnPropertyChanged("DttFechaDesde"); 
                }
            }
            private DateTime _DttFechaHasta;
            public DateTime DttFechaHasta
            {
                get { return _DttFechaHasta; }
                set 
                { 
                    _DttFechaHasta = value;
                    Consultar();
                    base.OnPropertyChanged("DttFechaHasta"); 
                }
            }
            private string _strCodigoMateriaPrima;
            public string strCodigoMateriaPrima
            {
                get { return _strCodigoMateriaPrima; }
                set 
                { 
                    _strCodigoMateriaPrima = value;
                    Consultar();
                    base.OnPropertyChanged("strCodigoMateriaPrima"); 
                }
            }



            private string _strNombreMateriaPrima;
            public string strNombreMateriaPrima
            {
                get { return _strNombreMateriaPrima; }
                set { _strNombreMateriaPrima = value; base.OnPropertyChanged("strNombreMateriaPrima"); }
            }

            private string _strTituloVentada;
            public string strTituloVentana
            {
                get { return _strTituloVentada; }
                set
                {
                    _strTituloVentada = value; base.OnPropertyChanged("strTituloVentana");
                }
            }
            private List<MRelacionGeneralAjustes> _LisRelacionGeneralAjustes;
            public List<MRelacionGeneralAjustes> LisRelacionGeneralAjustes
            {
                get { return _LisRelacionGeneralAjustes; }
                set { _LisRelacionGeneralAjustes = value; base.OnPropertyChanged("LisRelacionGeneralAjustes"); }
            }
            private VmRelacionGeneralAjustes _selLisRelacionGeneralAjustes = new VmRelacionGeneralAjustes();
            public VmRelacionGeneralAjustes selLisRelacionGeneralAjustes
            {
                get { return _selLisRelacionGeneralAjustes; }
                set 
                {
                    _selLisRelacionGeneralAjustes = value;
                    if (_selLisRelacionGeneralAjustes != null)
                    {
                        base.OnPropertyChanged("selLisRelacionGeneralAjustes");
                    }
                }
            }
            private ObservableCollection<VmRelacionGeneralAjustes> _lisRelacionGeneralAjustes = new ObservableCollection<VmRelacionGeneralAjustes>();
            public ObservableCollection<VmRelacionGeneralAjustes> lisRelacionGeneralAjustes
            {
                get { return _lisRelacionGeneralAjustes; }
                set { _lisRelacionGeneralAjustes = value; base.OnPropertyChanged("lisRelacionGeneralAjustes"); }
            }
        #endregion
        #region Comandos
            RelayCommand _cmdSalir;
            public ICommand cmdSalir
            {
                get
                {
                    if (_cmdSalir == null)
                    {
                        _cmdSalir = new RelayCommand(Salir);
                    }
                    return _cmdSalir;
                }
            }

            //FJRF - Final de Consulta de periodos
            RelayCommand _cmdImprimir;
            public ICommand cmdImprimir
            {
                get
                {
                    if (_cmdImprimir == null)
                    {
                        _cmdImprimir = new RelayCommand(x => imprimir());
                    }
                    return _cmdImprimir;
                }
            }

            RelayCommand _cmdReimprimir;
            public ICommand cmdReimprimir
            {
                get
                {
                    if (_cmdReimprimir == null)
                    {
                        _cmdReimprimir = new RelayCommand(x => reimprimir());
                    }
                    return _cmdReimprimir;
                }
            }
        #endregion
        #region Metodos
            private void Consultar()
            {
                strNombreMateriaPrima = "";

                if (strCodigoMateriaPrima != null)
                {
                    if (_strCodigoMateriaPrima.Length == 8)
                    {
                        LisRelacionGeneralAjustes = _repositorio.consultarRelacionGeneralAjustes(DttFechaDesde, DttFechaHasta, strCodigoMateriaPrima, strCodigoMateriaPrima);

                        DatParFechaDesde = DttFechaDesde;
                        DatParFechaHasta = DttFechaHasta;
                        strParCodigoMateriaPrimaInicial = strCodigoMateriaPrima;
                        strParCodigoMateriaPrimaFinal = strCodigoMateriaPrima;
                    }
                    else
                    {
                        LisRelacionGeneralAjustes = _repositorio.consultarRelacionGeneralAjustes(DttFechaDesde, DttFechaHasta, "   ", "ZZZ");

                        DatParFechaDesde = DttFechaDesde;
                        DatParFechaHasta = DttFechaHasta;
                        strParCodigoMateriaPrimaInicial = "   ";
                        strParCodigoMateriaPrimaFinal = "ZZZ";
                    }
                }
                else
                {
                    LisRelacionGeneralAjustes = _repositorio.consultarRelacionGeneralAjustes(DttFechaDesde, DttFechaHasta, "   ", "ZZZ");

                    DatParFechaDesde = DttFechaDesde;
                    DatParFechaHasta = DttFechaHasta;
                    strParCodigoMateriaPrimaInicial = "   ";
                    strParCodigoMateriaPrimaFinal = "ZZZ";
                }

                int numContador = 0;

                List<VmRelacionGeneralAjustes> all = (from lis in LisRelacionGeneralAjustes select new VmRelacionGeneralAjustes(lis)).ToList();
                foreach (VmRelacionGeneralAjustes VmDatos in all)
                {
                    numContador++;
                    if (numContador == 1)
                    {
                        if (_strCodigoMateriaPrima == null)
                        {
                            strNombreMateriaPrima = "El código no se digito, se buscan datos en el rango de fechas seleccionado.";
                        }
                        else
                        {
                            if (_strCodigoMateriaPrima.Length == 8)
                            {
                                strNombreMateriaPrima = VmDatos.NOMMAT_TMP;
                            }
                            else
                            {
                                strNombreMateriaPrima = "El código no existe, se buscan datos en el rango de fechas seleccionado.";
                            }
                        }
                    }
                }
                lisRelacionGeneralAjustes = new ObservableCollection<VmRelacionGeneralAjustes>(all);
            }
            public void Salir(Object frmformulario)
            {
                ((Window)frmformulario).Close();
            }
            private void ConsultarDatos(String StrTipoDeConsulta)
            {
                int IntCantidadDeRegistros = 0;
                List<VmRelacionGeneralAjustes> all = (from lis in LisRelacionGeneralAjustes select new VmRelacionGeneralAjustes(lis)).ToList();
                foreach (VmRelacionGeneralAjustes xx in all)
                {
                    IntCantidadDeRegistros++;
                }

                lisRelacionGeneralAjustes = new ObservableCollection<VmRelacionGeneralAjustes>(all);
            }
            private string ValidarDato(string StrCampo, string StrDato)
            {
                if (StrCampo == "No existe")
                {
                    //StrDato = ""; //Se quita para que pase los parametros como se envian directamente si se va a enviar al informe vacio solo quitar comentario
                }
                return StrDato;
            }
            private void imprimir()
            {
                try
                {
                    DataTable dtParametros = new DataTable("DtbParametros");
                    dtParametros.Columns.Add("pdt_desde", System.Type.GetType("System.String"));
                    dtParametros.Columns.Add("pdt_hasta", System.Type.GetType("System.String"));
                    dtParametros.Columns.Add("pva_mtpini", System.Type.GetType("System.String"));
                    dtParametros.Columns.Add("pva_mtpfin", System.Type.GetType("System.String"));

                    DataRow drParametros;
                    drParametros = dtParametros.NewRow();

                    drParametros["pdt_desde"] = DatParFechaDesde;
                    drParametros["pdt_hasta"] = DatParFechaHasta;
                    drParametros["pva_mtpini"] = strParCodigoMateriaPrimaInicial;
                    drParametros["pva_mtpfin"] = strParCodigoMateriaPrimaFinal;

                    dtParametros.Rows.Add(drParametros);

                    DataTable dtImp = new DataTable("DtbRelacionGeneralAjustes");

                    dtImp.Columns.Add("FECHA_TMP");
                    dtImp.Columns.Add("CODMTP_TMP");
                    dtImp.Columns.Add("NOMMAT_TMP");
                    dtImp.Columns.Add("ENTRA_TMP");
                    dtImp.Columns.Add("SALE_TMP");
                    dtImp.Columns.Add("COSUNI_TMP");
                    dtImp.Columns.Add("COSTOT_TMP");

                    DataRow dr;
                    foreach (VmRelacionGeneralAjustes i in lisRelacionGeneralAjustes)
                    {
                        dr = dtImp.NewRow();
                        dr["FECHA_TMP"] = i.strFECHA_TMP;
                        dr["CODMTP_TMP"] = i.CODMTP_TMP;
                        dr["NOMMAT_TMP"] = i.NOMMAT_TMP;
                        dr["ENTRA_TMP"] = i.ENTRA_TMP;
                        dr["SALE_TMP"] = i.SALE_TMP;
                        dr["COSUNI_TMP"] = i.COSUNI_TMP;

                        Double DblValor = i.COSTOT_TMP;
                        dr["COSTOT_TMP"] = DblValor.ToString("C", CultureInfo.CurrentCulture);

                        dtImp.Rows.Add(dr);
                    }

                    DataSet ds = new DataSet("DsRelacionGeneralAjustes");

                    ds.Tables.Add(dtImp);//Tabla
                    ds.Tables.Add(dtParametros);//Parametros

                    Vista vista = new Vista { ds = ds, reporte = @"reportes\rptRelacionGeneralAjustes.rpt" };
                    vista.Show();
                }
                catch (Exception ex) { MessageBox.Show(ex.Message); }
            }

            private void reimprimir()
            {
                try
                {
                    //string Dato = "";
                    if (selLisRelacionGeneralAjustes.ENTRA_TMP > 0)
                    {
                        FRMrImpEnt frm = new FRMrImpEnt();
                        frm.rAju.IsChecked = true;
                        frm.texEnt.Text = selLisRelacionGeneralAjustes.HOJNRO_TMP;
                        frm.ShowDialog();
                    }
                    else
                    {
                        FRMrImpSal frm = new FRMrImpSal();
                        frm.radioButton3.IsChecked = true;
                        frm.textBox1.Text = selLisRelacionGeneralAjustes.HOJNRO_TMP;
                        frm.ShowDialog();
                    }


                    
                }
                catch (Exception ex) { MessageBox.Show(ex.Message); }
            }
        #endregion
    }

    public class VmRelacionGeneralAjustes : ViewModelBase
    {
        #region Campos
        private MRelacionGeneralAjustes _RelacionGeneralAjustes = new MRelacionGeneralAjustes();
        private VmRelacionGeneralAjustes lis;
        #endregion

        #region Constructor
            public VmRelacionGeneralAjustes(MRelacionGeneralAjustes RelacionGeneralAjustes)
            {
                _RelacionGeneralAjustes = RelacionGeneralAjustes;
            }
            public VmRelacionGeneralAjustes()
            { 
            
            }

            public VmRelacionGeneralAjustes(VmRelacionGeneralAjustes lis)
            {
                // TODO: Complete member initialization
                this.lis = lis;
            }
        #endregion

        #region interfaces publicas (Propiedades)
            //FJRF - 1. Codigo Materia Prima
            public string CODMTP_TMP
            {
                get { return _RelacionGeneralAjustes.CODMTP_TMP; }
                set { _RelacionGeneralAjustes.CODMTP_TMP = value; base.OnPropertyChanged("CODMTP_TMP"); }
            }
            //FJRF - 2. Fecha
            public DateTime FECHA_TMP
            {
                get { return _RelacionGeneralAjustes.FECHA_TMP; }
                set { _RelacionGeneralAjustes.FECHA_TMP = value; base.OnPropertyChanged("FECHA_TMP"); }
            }
            public String strFECHA_TMP
            {
                get { return _RelacionGeneralAjustes.strFECHA_TMP; }
                set { _RelacionGeneralAjustes.strFECHA_TMP = value; base.OnPropertyChanged("strFECHA_TMP"); }
            }
            //FJRF - 3. Hoja número
            public String HOJNRO_TMP
            {
                get { return _RelacionGeneralAjustes.HOJNRO_TMP; }
                set { _RelacionGeneralAjustes.HOJNRO_TMP = value; base.OnPropertyChanged("HOJNRO_TMP"); }
            }
            //FJRF - 4. Nombre material
            public String NOMMAT_TMP
            {
                get { return _RelacionGeneralAjustes.NOMMAT_TMP; }
                set { _RelacionGeneralAjustes.NOMMAT_TMP = value; base.OnPropertyChanged("NOMMAT_TMP"); }
            }
            //FJRF - 5. Entradas
            public Int32 ENTRA_TMP
            {
                get { return _RelacionGeneralAjustes.ENTRA_TMP; }
                set { _RelacionGeneralAjustes.ENTRA_TMP = value; base.OnPropertyChanged("ENTRA_TMP"); }
            }
            //FJRF - 6. Sale
            public Int32 SALE_TMP
            {
                get { return _RelacionGeneralAjustes.SALE_TMP; }
                set { _RelacionGeneralAjustes.SALE_TMP = value; base.OnPropertyChanged("SALE_TMP"); }
            }
            //FJRF - 7. Costo unitario
            public Int32 COSUNI_TMP
            {
                get { return _RelacionGeneralAjustes.COSUNI_TMP; }
                set { _RelacionGeneralAjustes.COSUNI_TMP = value; base.OnPropertyChanged("SALE_TMP"); }
            }
            //FJRF - 8. Costo Total
            public Int32 COSTOT_TMP
            {
                get { return _RelacionGeneralAjustes.COSTOT_TMP; }
                set { _RelacionGeneralAjustes.COSTOT_TMP = value; base.OnPropertyChanged("COSTOT_TMP"); }
            }
        #endregion

        #region Metodos
            public MRelacionGeneralAjustes getRelacionGeneralAjustes()
            {
                return _RelacionGeneralAjustes;
            }
        #endregion
    }

}
